<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>计算属性</title>
  <script src="./vue.js"></script>
</head>
<body>
  <div id="root">
    {{fullName}}
    {{age}}
  </div>
  <script>
    var vm = new Vue({
      el: '#root',
      data: {
        fristName: 'yan',
        lastName: 'ming',
        fullName: 'yan ming',
        age: 26
      },
      // 使用侦听器来实现
      // 监听fristName或lastName，其中有一个值改变，会重新计算一次
      // age改变，不会重新执行一次
      watch: {
        fristName: function() {
          console.log('计算了一次')
          this.fullName = this.fullName + ' ' + this.lastName
        },
        lastName: function() {
          console.log('计算了一次')
          this.fullName = this.fristName + ' ' + this.lastName
        }
      }

      // 使用方法methods来实现
      // 没有缓存机制，当页面被重新渲染的时候，方法里的函数也会被重新执行。
      // 当计算属性和方法都可以实现的时候，使用计算属性更优。
      // methods: {
      //   fullName: function() {
      //     console.log('计算了一次');
      //     return this.fristName + ' ' + this.lastName;
      //   }
      // }

      // 计算属性: 内置缓存，fullName依赖值没有发生改变，就不会重新执行(计算)一次
      // computed: {
      //   fullName: function() {
      //     console.log('计算了一次') 
      //     // 初始打印一次，控制台改变age的值的时候，不会重新执行一次
      //     // 因为fullName的值并没有发生改变
      //     // 但是如果控制台改变firstName的值的时候，‘计算了一次’会被重新打印一次
      //     return this.fristName + ' ' + this.lastName
      //   }
      // }
    })
  </script>
</body>
</html>